package com.zhiletu.collect.util;

import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.script.ScriptException;

/**
 *
 * @Title: 字符串处理工具类
 * @Package com.zhiletu.collect.util
 * @Description: TODO
 * @author zhiletu
 * @date 2021年3月11日
 * @version V1.0
 */
public class ParseString {

	/**
	 * 若为null则转换为"",并替换"'" 为 "''",便于入库
	 * @param str
	 * @return
	 */
	public static String replaceParticular(String str) {

		if (str == null) {
			str = "";
		}
		if (!"".equals(str.trim())) {
			str = str.replaceAll("'", "''");
		}
		return str;
	}

	/**
	 * 将null转换为""
	 * @param obj
	 * @return
	 */
	public static String nvl(Object obj) {
		return obj == null ? "" : obj.toString();
	}

	/**
	 * 数字验证,当为数字时返回false
	 *
	 */
	public static boolean checkNumber(String num) {
		if (isNull(num))
			return false;
		return !num.matches("\\d*(\\.\\d+)?");
	}

	/**
	 * 电子邮箱验证, 验证通过返回false
	 *
	 */
	public static boolean checkEmail(String num) {
		if (isNull(num))
			return false;
		return !num.matches("(?:\\w[-._\\w]*\\w@\\w[-._\\w]*\\w\\.\\w{2,3}$)");
	}

	/**
	 * 手机号码验证, 验证通过返回false
	 *
	 */
	public static boolean checkMobile(String num) {
		if (isNull(num))
			return false;
		return !num.matches("^(13[0-9]|15[0|1|2|3|5|6|7|8|9]|18[6|7|8|9])\\d{8}$");
	}

	/**
	 * 电话号码验证, 验证通过返回false
	 *
	 */
	public static boolean checkPhone(String num) {
		if (isNull(num))
			return false;
		return !num.matches("(\\d{11})|^((\\d{7,8})|(\\d{4}|\\d{3})-(\\d{7,8})|(\\d{4}|\\d{3})-(\\d{7,8})-(\\d{4}|\\d{3}|\\d{2}|\\d{1})|(\\d{7,8})-(\\d{4}|\\d{3}|\\d{2}|\\d{1}))$");
	}

	/**
	 * 身份证号码验证, 验证通过返回false
	 *
	 */
	public static boolean checkID(String num) {
		//	if (isNull(num))
		//		return false;
		return !num.matches("^\\d{10}|\\d{13}|\\d{15}|\\d{17}(?:\\d|x|X)$");
	}

	/**
	 * 邮编验证, 验证通过返回false
	 *
	 */
	public static boolean checkPost(String num) {
		if (isNull(num))
			return false;
		return !num.matches("^[0-9]{6}$");
	}

	/**
	 * IP验证, 验证通过返回false
	 *
	 */
	public static boolean checkIP(String num) {
		//if (isNull(num))
		//	return false;
		return !num.matches("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}");
	}

	/**
	 * 当为null或为空时返回true
	 * @param str
	 * @return
	 */
	public static boolean isNull(String str) {
		return str == null || "".equals(str);
	}


	public static boolean notNull(String str) {
		return !isNull(str);
	}
	//匹配0,1

	/**
	 *  匹配0,1
	 */
	public static boolean checkPz(String num) {
		boolean bool = false;
		Pattern pattern = Pattern.compile("[0,1]*");
		Matcher isNum = pattern.matcher(num.toString().trim());
		if (!isNum.matches()) {
			bool = true;
		}
		return bool;
	}
	//获取当前时间

	/**
	 *  获取当前时间
	 */
	public static String getDateTime() {
		String dateTime;
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		Date dat = new Date();
		dateTime = df.format(dat.getTime());
		return dateTime;
	}
	//字符to日期的转换

	/**
	 *  字符to日期的转换
	 */
	public static Date charTdate(String strDat) {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		java.sql.Date dat = null;
		Date cDate;
		try {
			cDate = df.parse(strDat);
			dat = new java.sql.Date(cDate.getTime());
		}
		catch (ParseException e) {
		}
		return dat;
	}
	//日期to字符

	/**
	 * 日期to字符
	 */
	public static String dateTchar(Date dat) {
		if (dat == null)
			return "";
		SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
		String strDate = sim.format(dat.getTime());
		return strDate;
	}

	//取出月份

	/**
	 * 取出月份
	 */
	public static String getMounth() {
		String month = "";
		SimpleDateFormat sim = new SimpleDateFormat("yyyyMM");
		Date dat = new Date();
		month = sim.format(dat.getTime());
		return month;
	}

	//日期to字符
	public static String dateTchar1(Date dat) {
		SimpleDateFormat sim = new SimpleDateFormat("yyyyMMdd");
		String strDate = sim.format(dat.getTime());
		return strDate;
	}

	/**
	 * 验证字符串str长度是否超过数据库中字段的指定长度len
	 * @param str
	 * @param len
	 * @return
	 */
	public static boolean checkLength(String str, int len) {

		if ("".equals(str.trim()) || str == null) {
			return true;
		}

		byte[] tempCharArray = str.getBytes();

		if (tempCharArray.length > len) {

			return false;
		}
		return true;
	}

	//rs.get(**) 转为String (Date除外) zxq
	public static String stringRsGet(Object obj) {
		if (obj == null) {
			return "";
		}
		else if ("String".equals(obj.getClass().getSimpleName()) || "Char".equals(obj.getClass().getSimpleName())) {
			return (String) obj;
		}
		else if ("BigDecimal".equals(obj.getClass().getSimpleName())) {
			return obj.toString();
		}
		return "";
	}

	/**
	 * 整数校验 大于0
	 */
	public static boolean isNumeric(String str) {
		if (isNull(str))
			return false;
		return str.matches("\\d*");
	}

	/**
	 * 计算採用utf-8编码方式时字符串所占字节数 
	 *
	 * @param content
	 * @return
	 */
	public static int getByteSize(String content) {
		int size = 0;
		if (null != content) {
			try {
				// 汉字採用utf-8编码时占3个字节
				size = content.getBytes("utf-8").length;
			}
			catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		return size;
	}

	/**
	 * @Title: clearHtmlMark
	 * @Description: 清除所有html标记，包括script和style标签内容。
	 * @param html
	 * @return String
	 */
	public static String clearHtmlMark(String html) {
		/*去掉所有的html标记*/
		String delHtmlTag = "function delHtmlTag(str){str = str.replace(/<script[^>]*?>[\\s\\S]*?<\\/script>/g,\"\"); "
				+ "str = str.replace(/<style[^>]*?>[\\s\\S]*?<\\/style>/g,\"\"); return str.replace(/<[^>]+>/g,\"\");}";
		String content = "";

		try {
			content = ScriptingAPI.invokeScript(delHtmlTag, "delHtmlTag", new Object[] { html.toString() });

		}
		catch (ScriptException e) {
			e.printStackTrace();
		}
		catch (NoSuchMethodException e) {
			e.printStackTrace();
		}

		return content;
	}
}
